6f97fac207857c73f074e455f3cae1116c80888e,src/main/java/org/red5/io/amf/Output.java,Output,writeObject,#Object#,302
Before Change
/** {@inheritDoc} */
@SuppressWarnings({ "rawtypes" })
public void writeObject(Object object) {
if (checkWriteReference(object)) {
return;
}
storeReference(object);
// Create new map out of bean properties
BeanMap beanMap = new BeanMap(object);
// Set of bean attributes
Set set = beanMap.keySet();
if ((set.size() == 0) || (set.size() == 1 && beanMap.containsKey("class"))) {
// BeanMap is empty or can only access "class" attribute, skip it
writeArbitraryObject(object);
return;
}
// Write out either start of object marker for class name or "empty" start of object marker
Class<?> objectClass = object.getClass();
if (!objectClass.isAnnotationPresent(Anonymous.class)) {
buf.put(AMF.TYPE_CLASS_OBJECT);
putString(buf, Serializer.getClassName(objectClass));
} else {
buf.put(AMF.TYPE_OBJECT);
}
if (object instanceof ICustomSerializable) {
((ICustomSerializable) object).serialize(this);
buf.put((byte) 0x00);
buf.put((byte) 0x00);
buf.put(AMF.TYPE_END_OF_OBJECT);
return;
}
// Iterate thru entries and write out property names with separators
for (Object key : set) {
String fieldName = key.toString();
log.debug("Field name: {} class: {}", fieldName, objectClass);
Field field = getField(objectClass, fieldName);
Method getter = getGetter(objectClass, beanMap, fieldName);
// Check if the Field corresponding to the getter/setter pair is transient
if (!serializeField(objectClass, fieldName, field, getter)) {
continue;
}
putString(buf, fieldName);
Serializer.serialize(this, field, getter, object, beanMap.get(key));
}
// Write out end of object mark
buf.put((byte) 0x00);
buf.put((byte) 0x00);
buf.put(AMF.TYPE_END_OF_OBJECT);
}
After Change
/** {@inheritDoc} */
@SuppressWarnings({ "rawtypes" })
public void writeObject(Object object) {
if (!checkWriteReference(object)) {
storeReference(object);
// create new map out of bean properties
BeanMap beanMap = new BeanMap(object);